/****************************************************************************
 *   Copyright (C) 2008 by 7552                                             *
 *   fiubataller2-08c1@gruposyahoo.com.ar                                   *
 *                                                                          *
 *  Licensed under the Apache License, Version 2.0 (the "License");         *
 *  you may not use this file except in compliance with the License.        *
 *  You may obtain a copy of the License at                                 *
 *                                                                          *
 *      http://www.apache.org/licenses/LICENSE-2.0                          *
 *                                                                          *
 *  Unless required by applicable law or agreed to in writing, software     *
 *  distributed under the License is distributed on an "AS IS" BASIS,       *
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.*
 *  See the License for the specific language governing permissions and     *
 *  limitations under the License.                                          *
 *                                                                          *
 ***************************************************************************/

#include "CriticalSection.h"

using namespace Taller2::TransRec;

CCriticalSection::CCriticalSection(pthread_mutex_t &cs, bool locked)
{
	m_bLocked = false;
	m_mutex = cs;
	if (locked)
		Lock();
};

//****************************************************************************

void CCriticalSection::CreateCriticalSection(pthread_mutex_t &cs)
{
	pthread_mutex_init(&cs, NULL);
};

//****************************************************************************

void CCriticalSection::DeleteCriticalSection(pthread_mutex_t &cs)
{
	pthread_mutex_destroy(&cs);
};

//****************************************************************************

CCriticalSection::~CCriticalSection()
{
	Unlock();
};

//****************************************************************************

void CCriticalSection::Lock()
{
	if (!m_bLocked)
	{
		pthread_mutex_lock(&m_mutex);
		m_bLocked = true;
	};
};

//****************************************************************************

void CCriticalSection::Unlock()
{
	if (m_bLocked)
	{
		m_bLocked = false;
		pthread_mutex_unlock(&m_mutex);
	};
};

